<?php

if (!defined('AOWOW_REVISION'))
    die('illegal access');

if (!CLI)
    die('not in cli mode');


/* deps:
 * creature_template
 * creature
*/


$customData = array(
);
$reqDBC = ['talent', 'spell', 'skilllineability', 'creaturefamily'];

function pet(array $ids = [])
{
    $baseQuery = '
        REPLACE INTO
            ?_pet
        SELECT
            f.id,
            categoryEnumId,
            0,                                              -- cuFlags
            0,                                              -- minLevel
            0,                                              -- maxLevel
            petFoodMask,
            petTalentType,
            0,                                              -- exotic
            0,                                              -- expansion
            name_loc0, name_loc2, name_loc3, name_loc4, name_loc6, name_loc8,
            ic.id,
            skillLine1,
            0, 0, 0, 0,                                     -- spell[1-4]
            0, 0, 0                                         -- armor, damage, health
        FROM
            dbc_creaturefamily f
        LEFT JOIN
            ?_icons ic ON ic.name = LOWER(SUBSTRING_INDEX(f.iconString, "\\\\", -1))
        WHERE
            petTalentType <> -1';

    $spawnQuery = '
        SELECT
            ct.family AS ARRAY_KEY,
            MIN(ct.minlevel) AS minLevel,
            MAX(ct.maxlevel) AS maxLevel,
            IF(ct.type_flags & 0x10000, 1, 0) AS exotic
        FROM
            creature_template ct
        JOIN
            creature c ON ct.entry = c.id
        WHERE
            ct.type_flags & 0x1
        GROUP BY
            ct.family';

    $bonusQuery = '
        UPDATE
            ?_pet p,
            dbc_skilllineability sla,
            dbc_spell s
        SET
            armor  = s.effect2BasePoints + s.effect2DieSides,
            damage = s.effect1BasePoints + s.effect1DieSides,
            health = s.effect3BasePoints + s.effect3DieSides
        WHERE
            p.skillLineId = sla.skillLineId AND
            sla.spellId   = s.id AND
            s.name_loc0   = "Tamed Pet Passive (DND)"';

    $spellQuery = '
        SELECT
            p.id,
            MAX(s.id) AS spell
        FROM
            dbc_skilllineability sla
        JOIN
            ?_pet p ON p.skillLineId = sla.skillLineId
        JOIN
            dbc_spell s ON sla.spellId = s.id
        LEFT OUTER JOIN
            dbc_talent t ON s.id  = t.rank1
        WHERE
            (s.attributes0 & 0x40) = 0 AND
            t.id IS NULL
        GROUP BY
            s.name_loc0, p.id';

    // basic copy from creaturefamily.dbc
    DB::Aowow()->query($baseQuery);

    // stats from craeture_template
    $spawnInfo = DB::World()->query($spawnQuery);
    foreach ($spawnInfo as $id => $info)
        DB::Aowow()->query('UPDATE ?_pet SET ?a WHERE id = ?d', $info, $id);

    // add petFamilyModifier to health, mana, dmg
    DB::Aowow()->query($bonusQuery);

    // add expansion manually
    DB::Aowow()->query('UPDATE ?_pet SET expansion = 1 WHERE id IN (30, 31, 32, 33, 34)');
    DB::Aowow()->query('UPDATE ?_pet SET expansion = 2 WHERE id IN (37, 38, 39, 41, 42, 43, 44, 45, 46)');

    // assign pet spells
    $pets = DB::Aowow()->select($spellQuery);
    $res  = [];

    foreach ($pets as $set)                             // convert to usable structure
    {
        if (!isset($res[$set['id']]))
            $res[$set['id']] = [];

        $res[$set['id']]['spellId'.(count($res[$set['id']]) + 1)] = $set['spell'];
    }

    foreach ($res as $pId => $row)
        DB::Aowow()->query('UPDATE ?_pet SET ?a WHERE id = ?d', $row, $pId);

    return true;
}

?>
